home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
-
- #include "fixed32.hpp"
-
- Fixed32 SinTab[256];
- Fixed32 CosTab[256];
-
-
- void
- initFixed32(void)
- {
- FILE *fp;
-
- fp = fopen("sintab.dat", "rb");
- fread(SinTab, 4, 256, fp);
- fread(CosTab, 4, 256, fp);
- fclose(fp);
- }
-
-
- void
- CosSin(Iangle theta, Fixed32 *Cos, Fixed32 *Sin)
- {
- *Sin = SinTab[theta];
- *Cos = CosTab[theta];
- }
-
-
- /* ASM fixedpoint math routines
- ;--------------------------------------------------
- ; Sqrt - Fixed Point Square Root (High/Normal Precision)
- ; IN : ecx
- ; OUT : eax
- ; Modified : ebx,ecx,edx
- Sqrt PROC
-
- ;This is the High Precision version for the sqrt.
- ;It gives the optimal 8.16 precision but takes
- ;a little longer (24 iterations, 48 bits intead of
- ;16 iterations and 32 bits)
-
- xor eax,eax ;eax is root
- mov ebx,40000000h
- sqrt1:
- mov edx,ecx ;edx = val
- sub edx,ebx ;val - bitsqr
- jb sqrt2
- sub edx,eax ;val - root
- jb sqrt2
- mov ecx,edx ;val >= (root+bitsqr) -> accept subs
- shr eax,1 ;root >> 1
- or eax,ebx ;root | bitsqr
- shr ebx,2 ;bitsqr>>2
- jnz sqrt1
- jz sqrt5
- sqrt2:
- shr eax,1 ;val < (root+bitsqr) -> dont change val
- shr ebx,2 ;bitsqr>>2
- jnz sqrt1
- ; we now have the 8.8 precision
-
- sqrt5:
- mov ebx,00004000h
- shl eax,16
- shl ecx,16
- sqrt3:
- mov edx,ecx ;edx = val
- sub edx,ebx ;val - bitsqr
- jb sqrt4
- sub edx,eax ;val - root
- jb sqrt4
- mov ecx,edx ;val >= (root+bitsqr) -> accept subs
- shr eax,1 ;root >> 1
- or eax,ebx ;root | bitsqr
- shr ebx,2 ;bitsqr>>2
- jnz sqrt3
- ret
- sqrt4:
- shr eax,1 ;val < (root+bitsqr) -> dont change val
- shr ebx,2 ;bitsqr>>2
- jnz sqrt3
- ret
-
- Sqrt ENDP
- */
-
-